home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / SciTex / examples / phong / sp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  4.6 KB  |  178 lines

  1. /******************************************************************************
  2.  *  sp.c 
  3.  ******************************************************************************
  4.  *
  5.  *  Purpose:
  6.  *      contains main and the event loop
  7.  *
  8.  *  Authors:
  9.  *      Michael Teschner and Christian Henn
  10.  *
  11.  *  Note:
  12.  *      None.
  13.  *  
  14.  *  Revisions:
  15.  *      10.11.93    micha    Created file.
  16.  *
  17.  ******************************************************************************
  18.  *
  19.  *  COPYRIGHT (C)                  1992, 1993, 1994
  20.  *
  21.  *  BY  CHRISTIAN HENN             M.E. MUELLER-INSTITUTE FOR MICROSCOPY (MIM)
  22.  *      HENN@COMP.BIOZ.UNIBAS.CH   CH-4056 BASEL, SWITZERLAND   
  23.  *
  24.  *  AND MICHAEL WALDHERR-TESCHNER  SILICON GRAPHICS INDUSTRIES (SGI)
  25.  *      MICHA@BASEL.SGI.COM        CH-4125 RIEHEN, SWITZERLAND
  26.  *
  27.  ******************************************************************************
  28.  *
  29.  *  PERMISSION TO USE, COPY, MODIFY AND DISTRIBUTE THIS SOFTWARE AND ITS DOCU-
  30.  *  MENTATION FOR THE PURPOSE OF RESEARCH, DEVELOPMENT AND EDUCATION IS HEREBY
  31.  *  GRANTED FREE OF CHARGE, SUBJECT TO THE FOLLOWING RESTRICTIONS:
  32.  *
  33.  *  THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
  34.  *  IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF DESIGN,
  35.  *  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A
  36.  *  COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  37.  *
  38.  *  IN NO EVENT SHALL SILICON GRAPHICS OR THE M.E. MUELLER-INSTITUTE BE LIABLE
  39.  *  FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  40.  *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  41.  *  WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
  42.  *  LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  43.  *  THIS SOFTWARE.
  44.  *
  45.  ******************************************************************************
  46.  */
  47. #include <stdio.h>
  48. #include <gl/gl.h>
  49. #include <gl/device.h>
  50. #include <gl/get.h>
  51. #include <math.h> 
  52. #include "trackball.h" 
  53.  
  54. int shade_flag ;
  55. int line_flag  = 0;
  56. int high_tex = 1;
  57. int solid_flag = 1;
  58.  
  59. float fog_par[5];
  60. int fog_f = 0;
  61.  
  62.  
  63. main(int argc, char *argv[])
  64. {
  65.     int win_id;
  66.     int loop, dev, i, j;
  67.     short code;
  68.       
  69.     if( argc == 1 ) shade_flag = 0;
  70.     else            shade_flag = 1;
  71.  
  72.     foreground();
  73.  
  74.     keepaspect(1,1);
  75.     minsize( 500, 500);
  76.     if( shade_flag ) win_id = winopen("phong");
  77.     else             win_id = winopen("gouraud");
  78.  
  79.     doublebuffer();
  80.     RGBmode();
  81.     RGBcolor(0,0,0);
  82.     clear();
  83.     gconfig();
  84.          
  85.     subpixel(TRUE);
  86.  
  87.     zbuffer(TRUE);
  88.     gr_init();
  89.     mmode(MVIEWING);
  90.  
  91.     sbr_ini_trackball(win_id);     
  92.  
  93.     qdevice( ESCKEY );
  94.     qdevice( F12KEY );
  95.     qdevice( F11KEY );
  96.     
  97.     qdevice( F1KEY );
  98.     qdevice( F2KEY ); 
  99.     qdevice( F3KEY );
  100.     qdevice( F4KEY );
  101.     qdevice( F5KEY );
  102.     qdevice( F6KEY );
  103.     qdevice( F7KEY );
  104.     qdevice( F8KEY );
  105.     qdevice( F9KEY );
  106.     qdevice( F10KEY );
  107.     qdevice( F11KEY );
  108.     qdevice( F12KEY );
  109.  
  110.     qdevice( NKEY );
  111.     qdevice( MKEY );
  112.     qdevice( SKEY );
  113.     qdevice( FKEY );
  114.     qdevice( IKEY );
  115.  
  116.     loop = TRUE;
  117.     zbuffer(TRUE);
  118.  
  119.     fog_par[0] = -1.5/2.;
  120.     fog_par[1] = 1.5 / 2;
  121.     fog_par[2] = fog_par[3] = fog_par[4] = 0;
  122.     fogvertex(FG_VTX_LIN,fog_par);
  123.  
  124.     sbr_bind_high(); 
  125.  
  126.     while(loop){
  127.  
  128.         if( qtest() /* || ! attached  */){
  129.  
  130.         dev = qread(&code);
  131.            
  132.         if( code == 0 ) continue;
  133.         switch(dev) {
  134.         case ESCKEY : loop = FALSE;
  135.                       break;
  136.                 case F1KEY  : shade_flag = 1;
  137.                               break;
  138.                 case F2KEY  : shade_flag = 0;
  139.                               break;
  140.                 case F3KEY  : sbr_bind_high();
  141.                               break;
  142.                 case F4KEY  : sbr_bind_low();
  143.                               break;
  144.  
  145.                 case IKEY  : system (" ipaste texture.rgb ");
  146.                               break;
  147.  
  148.                 case MKEY   : high_tex = (high_tex) ? 0 : 1;
  149.                               break;
  150.                 case NKEY   : line_flag = (line_flag) ? 0 : 1;
  151.                               break;
  152.                 case SKEY   : solid_flag = (solid_flag) ? 0 : 1;
  153.                               break;
  154.                 case FKEY   : if( fog_f == 1){
  155.                                fogvertex(FG_OFF, fog_par);
  156.                                fog_f = 0;
  157.                                }
  158.                               else {
  159.                                fogvertex(FG_ON, fog_par);
  160.                                fog_f = 1;
  161.                                }
  162.                               break;
  163.         }
  164.     }
  165.  
  166.         reshapeviewport();
  167.         do_trackball();
  168.  
  169.         scene_draw();
  170.         
  171.     
  172.     }
  173.  
  174.     winclose(win_id);
  175.     
  176. }
  177.  
  178.